package com.cskaoyan.javase.array.exception5;

/**
 * @description: 数组长度为0和数组是空(null)有啥区别？
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 *  数组长度为0和数组是空(null)有啥区别？
 *  无论长度为0还是=null都是初始化的数组
 *  长度为0的数组虽然不能赋值不能装元素，但是可以获取长度之类的操作
 *  但是=null的数组就没办法操作了，否则会空指针异常
 *
 *
 *  长度为0的数组有什么用？
 *  长度为0的数组可以作为数组返回值中不想返回任何数据的数组
 *
 *
 */
public class Demo3 {
    public static void main(String[] args) {
        //初始化一个长度为0的数组
        //长度为0的数组可以操作，但是没有空间进行赋值
        int[] arr1 = {};
        int[] arr4 =new int[0];
        System.out.println(arr1);//Implicit call to 'toString()' on array 'arr1' 隐含了一个toString方法
        System.out.println(arr1.length);

        //数组为null
        int[] arr2 = null;
        System.out.println(arr2);
        //System.out.println(arr2.length);

        //没有初始化的数组
        int[] arr3;
        //System.out.println(arr3);

        System.out.println("------------------------");
        int[] arr = getArray(0);
        System.out.println(arr.length);

    }

    //需求：一个方法给我返回多个int数据，可能是一个，可能是两个，可能是三个，还可能一个都不返回
    //这个时候相当于应该返回一个容器，数组
    public static int[] getArray(int a){
        //现在通过if判断去返回数组
        //int[] arr2 = null;
        if (a>0){
            int[] arr = {1,2,3};
            //Missing return statement
            //if不是百分百会执行的，编译器不认
            return arr;
        }else if (a<-1){
            int [] arr2 = {1};
            return arr2;
        }
        else {
            //int[] arr3 = null;
            //方法中要返回一个数组时，最后的结果返回null，所以如果这个要返回的数组中不应该装数据，我们不应该返回null数组。而应该返回一个长度为0的数组
            int[] arr3 ={};
            return arr3;
            //return new int[0];
            //return new int[];
        }
    }
}
